Static analysis is an important component in software engineering, mainly in compiler optimization, bug-finding, verification and programmer productivity enhancement. A static analysis identifies and reasons about properties of code (e.g., null dereferencing, buffer overflows, integer overflows, API misuse, and security vulnerabilities such as tainted information flows) without executing the code. Scaling a static analysis to large codebases is a difficult problem. Typically, precision is sacrificed to achieve scalability. That is, an imprecise static analysis may produce false positives. Identifying true reports (e.g., actual defects) is a challenge. Typically, manual investigation of potential defects in the code becomes overwhelming when the percentage of false positives exceeds 5%. In addition, when a static analysis is used to identify defects in large codebases, it is challenging to produce reports with sufficient information to enable programmers to repair the identified defects.